using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FiltronASP.Models.DAO.Interfaces;

namespace FiltronASP.Models.DAO.Extensions
{
    /// <summary>
    /// Klasa zawierajaca rozszerzenia metod zwiazanych z tabela wersji jezykowych.
    /// </summary>
    public static class LanguageExtensions
    {

        /// <summary>
        /// Metoda pomocnicza konwertujaca wersji jezykowych z bazy do 
        /// IEnumerable<SelectListItem>.
        /// </summary>
        /// <param name="languages">kolekcja jezykow</param>
        /// <param name="selectedId">id wybranego jezyka</param>
        /// <returns>liste mozliwa do wrzucenia w drop downa</returns>
        public static IEnumerable<SelectListItem> ToSelectListItems(this IQueryable<Language> languages,
            int? selectedId)
        {
            if (selectedId != null)
            {
                return languages.OrderBy(lang => lang.language_name)
                         .Select(lang =>
                             new SelectListItem
                             {
                                 Selected = (lang.language_id == selectedId),
                                 Text = lang.language_name,
                                 Value = lang.language_id.ToString()
                             });
            }   //if not null
            else
            {
                return languages.OrderBy(lang => lang.language_name)
                         .Select(lang =>
                             new SelectListItem
                             {
                                 Text = lang.language_name,
                                 Value = lang.language_id.ToString()
                             });
            }   //else not null
        }

        /// <summary>
        /// Metoda do pobierania domyslnego id wersji jezykowej (gdy nie jest przekazywana jako parametr).
        /// </summary>
        /// <param name="languageDAO">klasa odpowiedzialna za operacja na bazie danych, tabela wersji jezykowych</param>
        /// <returns>domyslne id wersji jezykowej</returns>
        public static Language GetDefaultLanguage(this ILanguageDAO languageDAO)
        {
            if (languageDAO == null)
            {
                return null;
            }   //if null
            IQueryable<Language> languages = languageDAO.FindAll();
            if (languages == null)
            {
                return null;
            }   //if null
            if (!languages.Any())
            {
                return null;
            }   //if null
            return languages.First();
        }

    }
}
